package com.ktjiaoyu.controller;
import com.ktjiaoyu.entity.SysUser;
import com.ktjiaoyu.ex.LoginException;
import com.ktjiaoyu.service.SysUserService;
import com.ktjiaoyu.utils.Constants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
 * @return 13141
 * 2025/7/1
 * 16:06
 */
@Controller
public class LoginController extends BaseController {
    @Autowired
    private SysUserService sysUserService;

    @GetMapping("/login")
    public String toLogin() {
        // 由于 login.jsp页面不在 WEB-INF 下，所以不能返回逻辑视图名称
        // 需要使用 forward:前缀告知 SpringMVC 转发到根路径下的 login.jsp
        return forward("/login.jsp");
    }

    @PostMapping("/login")
    public String login(@RequestParam("account") String account,
                        @RequestParam("password") String password) {
//        String url = "jdbc:mysql://localhost:3306/ktsms?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
//        String user = "root";
//        String password2 = "123456";
//        try (Connection conn = DriverManager.getConnection(url, user, password2)) {
//            System.out.println("连接成功！");
//        } catch (SQLException e) {
//            throw new CannotCreateTransactionException("JDBC连接数据库失败");
//        }
        SysUser loginUser = sysUserService.login(account, password);
        if (loginUser != null) {
            // 登录成功，用户信息存入 session
            session(Constants.SESSION_USER, loginUser);
            // 重定向到后台首页
            return redirect("/main/index");
        } else {
//            // 设置错误信息到 request 作用域
//            request(Constants.REQUEST_ERROR, loginUser);
//            // 转发到登录页面
//            return forward("login.jsp");
//            登录失败抛出异常
//            throw new RuntimeException("登录失败，用户名或密码错误！");
            throw new LoginException("登录失败，用户名或者密码错误！");
        }
    }

    // 跳转到后台首页
    @GetMapping("/main/index")
    public String index() {
        return "index";
    }
    // 增加一个抛出 RuntimeException 异常的接口
    @GetMapping("/ex")
    public void throwException() {
        throw new RuntimeException("测试不同异常映射到不同页面");
    }
//    注销方法
    @GetMapping("/logout")
    public String logOut() {
        session().removeAttribute(Constants.SESSION_USER);
        return redirect("/login");
    }

    // 局部异常处理
//    @ExceptionHandler(value = RuntimeException.class)
//    public String handlerException(RuntimeException e, HttpServletRequest request) {
////        设置捕获的错误对象到 request 作用域
//        request.setAttribute(Constants.REQUEST_ERROR, e);
////        跳转异常页面：/WEB-INF/jsp/500.jsp
//        return "500";
//    }
}
